export const crumb = {
  _id: null,
  _children: null,
  _flat: [],
  _result: [],

  /**
   * 将输入菜单数据转化为一唯数组
   * @param arrTree  菜单数据
   * @param pid  从属结点id
   */
  _conv_array: (arrTree, pid = null) => {
    for (let i = 0; i < arrTree.length; i++) {
      if (pid != '') {
        arrTree[i]._parent_id = pid;
      }
      crumb._flat.push(arrTree[i]);
      if (undefined != arrTree[i][crumb._children] && arrTree[i][crumb._children].length != 0) {
        crumb._conv_array(arrTree[i][crumb._children], arrTree[i][crumb._id]);
      }
    }
  },

  /**
   * 查找结点位置
   * @param node  结点标识
   */
  _find_node: (node) => {
    for (const i in crumb._flat) {
      if (crumb._flat[i][crumb._id] == node) {
        crumb._result.push(crumb._flat[i]);
      }
      if (crumb._flat[i]._parent_id != undefined && crumb._flat[i][crumb._id] == node) {
        crumb._find_node(crumb._flat[i]._parent_id);
      }
    }
  },

  /**
   * 查找结点所在位置
   * @param tree  菜单数据
   * @param find_id  查找结点的ID
   * @param id    唯一标示字段名称
   * @param children  子节点字段标示名称
   * @returns {T[]}
   */
  find: (tree, find_id, id = 'id', children = 'children') => {
    crumb._id = id;
    crumb._children = children;
    crumb._flat = [];
    crumb._result = [];

    crumb._conv_array(tree);
    crumb._find_node(find_id);
    return crumb._result.reverse();
  },
};
